package org.example.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

/**
 * jwt工具类
 * @author Jimmy
 * @version 1.0
 */

public class JwtUtils {

    private static final String secret = "yuanTiKu";
    private static final Long expiration = 1800000L;

    /**
     * 创建token
     * @param id 用户ID
     * @return
     */
    public static String generateToken(String id) {
        return Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, secret)
                .setSubject(id)
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + expiration * 1000))
                .compact();

    }


    /**
     * 从token中获取用户ID
     * @param token
     * @return
     */
    public static String getUserIdFromToken(String token){
        return getTokenBody(token).getSubject();
    }


    /**
     *  是否已过期
     * @param token
     * @return
     */
    public static boolean isExpiration(String token){
        return getTokenBody(token).getExpiration().before(new Date());
    }


    /**
     * 获取token中的信息
     * @param token
     * @return
     */
    private static Claims getTokenBody(String token){
        return Jwts.parser()
                .setSigningKey(secret)
                .parseClaimsJws(token)
                .getBody();
    }
}
